package gui

import (
	"sort"
	"strings"
)

// SortManager 排序管理器
type SortManager struct {
	sortBy        string // "name", "size", "time"
	sortAscending bool
}

// NewSortManager 创建排序管理器
func NewSortManager() *SortManager {
	return &SortManager{
		sortBy:        "name",
		sortAscending: true,
	}
}

// SetSortOrder 强制设置排序字段与顺序
func (sm *SortManager) SetSortOrder(sortBy string, ascending bool) {
	if sortBy != "" {
		sm.sortBy = sortBy
	}
	sm.sortAscending = ascending
}

// SetSortBy 设置排序方式
func (sm *SortManager) SetSortBy(sortBy string) {
	if sm.sortBy == sortBy {
		// 相同字段则切换升序/降序
		sm.sortAscending = !sm.sortAscending
	} else {
		// 不同字段则设置为升序
		sm.sortBy = sortBy
		sm.sortAscending = true
	}
}

// SortFiles 对文件列表进行排序
func (sm *SortManager) SortFiles(files []*FileInfo) {
	if len(files) == 0 {
		return
	}

	sort.Slice(files, func(i, j int) bool {
		var result bool
		switch sm.sortBy {
		case "name":
			result = strings.ToLower(files[i].Name) < strings.ToLower(files[j].Name)
		case "size":
			result = files[i].Size < files[j].Size
		case "time":
			result = files[i].LastModified < files[j].LastModified
		default:
			result = strings.ToLower(files[i].Name) < strings.ToLower(files[j].Name)
		}

		if !sm.sortAscending {
			result = !result
		}
		return result
	})
}

// GetSortBy 获取当前排序字段
func (sm *SortManager) GetSortBy() string {
	return sm.sortBy
}

// IsAscending 获取是否升序排序
func (sm *SortManager) IsAscending() bool {
	return sm.sortAscending
}
